//
//  Primer_ControlFlow_DemoVC.swift
//  APSwift
//
//  Created by jianbo.pei on 2022/4/28.
//

import UIKit

/// Swift入门系列之控制流
class Primer_ControlFlow_DemoVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        test1()
        test2()
        test3()
        test4()
    }
    
    private func test1() {
        print("\(#function)")
        //!!!: 闭区间运算符（a...b，等价于a <= i <= b）
        let names = ["李白", "韩愈", "杜甫", "王安石", "苏轼", "李清照", "李煜"]
        
        for i in 0...6 {
            print("第\(i)位诗人的名字是：\(names[i])")
        }
        
        /*
         第0位诗人的名字是：李白
         第1位诗人的名字是：韩愈
         第2位诗人的名字是：杜甫
         第3位诗人的名字是：王安石
         第4位诗人的名字是：苏轼
         第5位诗人的名字是：李清照
         第6位诗人的名字是：李煜
         */
        
        /// Note: `i`默认是`let`，如果需要也可以定义为`var`
        for var i in 0...6 {
            if i == 2 {
                i += 2
            }
            print("var is 第\(i)位诗人的名字是：\(names[i])")
        }
        
        /*
         var is 第0位诗人的名字是：李白
         var is 第1位诗人的名字是：韩愈
         var is 第4位诗人的名字是：苏轼
         var is 第3位诗人的名字是：王安石
         var is 第4位诗人的名字是：苏轼
         var is 第5位诗人的名字是：李清照
         var is 第6位诗人的名字是：李煜
         */
        
        let range = 0...6
        for i in range {
            print("range - 第\(i)位诗人的名字是：\(names[i])")
        }
        
        /// Note: `a`和`b`还可以是`var`类型
        let a = 0
        let b = 6
        for i in a...b {
            print("range - 第\(i)位诗人的名字是：\(names[i])")
        }
        
        /*
         range - 第0位诗人的名字是：李白
         range - 第1位诗人的名字是：韩愈
         range - 第2位诗人的名字是：杜甫
         range - 第3位诗人的名字是：王安石
         range - 第4位诗人的名字是：苏轼
         range - 第5位诗人的名字是：李清照
         range - 第6位诗人的名字是：李煜
         */
        
        /// Note: 如果for循环，变量i不用的话，用_替代，否则会报警告：
        /// "Immutable value 'i' was never used; consider replacing with '_' or removing it"
        for _ in 0...6 {
            print("123")
        }
    }
    
    
    private func test2() {
        print("\(#function)")
        //!!!: 半开区间运算符（a..<b，等价于a <= i < b）
        let names = ["李白", "韩愈", "杜甫", "王安石", "苏轼", "李清照", "李煜"]
        
        for i in 0..<6 {
            print("0..<6 第\(i)位诗人的名字是：\(names[i])")
        }
        
        for i in 0..<6 {
            print("0..<6 第\(i)位诗人的名字是：\(names[i])")
        }
    }
    
    
    private func test3() {
        print("\(#function)")
        //!!!: 单侧区间运算符（a...或者..<b或者...b）
        let names = ["李白", "韩愈", "杜甫", "王安石", "苏轼", "李清照", "李煜"]
        
        APPrint()
        for name in names[1...] {
            print("names[1...] name is \(name)")
        }
        
        /*
         names[1...] name is 韩愈
         names[1...] name is 杜甫
         names[1...] name is 王安石
         names[1...] name is 苏轼
         names[1...] name is 李清照
         names[1...] name is 李煜
         */
        
        APPrint()
        for name in names[...4] {
            print("names[...4] name is \(name)")
        }
        
        /*
         names[...4] name is 李白
         names[...4] name is 韩愈
         names[...4] name is 杜甫
         names[...4] name is 王安石
         names[...4] name is 苏轼
         */
        
        APPrint()
        for name in names[..<4] {
            print("names[..<4] name is \(name)")
        }
        
        /*
         names[..<4] name is 李白
         names[..<4] name is 韩愈
         names[..<4] name is 杜甫
         names[..<4] name is 王安石
         */
    }
    
    
    //!!!: `where`的使用
    private func test4() {
        APPrint()
        print("\(#function)")
        
        let point = (1, -1)
        switch point {
        case let (x, y) where x == y:
            print("x==y")
        case let (x, y) where x == -y:
            print("x == -y")
        case let (x, y):
            print("x is \(x), y is \(y)")
        }
        
        APPrint()
        /// 将所有正数相加
        let numbers = [10, 20, -10, -30, 30, -20]
        var sum = 0
        /// 使用`where`对`num`进行过滤
        for num in numbers where num > 0 {
            sum += num
        }
        print("所有正数之和是 \(sum)")
        /// 所有正数之和是 60
    }
    
}
